//
// Created by francklinson on 2021/11/26 AT 10:12.
// May Saint Diana bless you!
//

#include <boost/scoped_ptr.hpp>
#include <iostream>

/**
 * 一个作用域指针不能传递它所包含的对象的所有权到另一个作用域指针。 一
 * 旦用一个地址来初始化，这个动态分配的对象将在析构阶段释放。
 * 因为一个作用域指针只是简单保存和独占一个内存地址，所以 boost::scoped_ptr 的实现就要比 std::auto_ptr 简单。
 * 在不需要所有权传递的时候应该优先使用 boost::scoped_ptr 。
 * 在这些情况下，比起 std::auto_ptr 它是一个更好的选择，因为可以避免不经意间的所有权传递。
 *
 * boost::scoped_ptr 的析构函数中使用 delete 操作符来释放所包含的对象。
 * 这对 boost::scoped_ptr 所包含的类型加上了一条重要的限制。
 * boost::scoped_ptr 不能用动态分配的数组来做初始化，因为这需要调用 delete[] 来释放。
 * @return
 */
int main() {
    boost::scoped_ptr<int> i(new int);
    std::cout << *i << std::endl;
    *i = 1;
    std::cout << *i << std::endl;
    *i.get() = 2;
    std::cout << *i << std::endl;
    i.reset(new int);
    std::cout << *i << std::endl;

}
